package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.GzffEntryInfo;
import com.ruoyi.basebill.DTO.GzffInfo;
import com.ruoyi.basebill.DTO.JtzygztzEntryInfo;
import com.ruoyi.basebill.DTO.JtzygztzInfo;
import com.ruoyi.basebill.domain.WfzGzft;
import com.ruoyi.basebill.domain.WfzGzftentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzJtzygztzentry;
import com.ruoyi.basebill.mapper.WfzJtzygztzMapper;
import com.ruoyi.basebill.domain.WfzJtzygztz;
import com.ruoyi.basebill.service.IWfzJtzygztzService;

/**
 * 支援工资调整Service业务层处理
 * 
 * @author lianxiaolong
 * @date 2022-12-17
 */
@Service
public class WfzJtzygztzServiceImpl implements IWfzJtzygztzService 
{
    @Autowired
    private WfzJtzygztzMapper wfzJtzygztzMapper;

    /**
     * 查询支援工资调整
     * 
     * @param fid 支援工资调整主键
     * @return 支援工资调整
     */
    @Override
    public WfzJtzygztz selectWfzJtzygztzByFid(Long fid)
    {
        return wfzJtzygztzMapper.selectWfzJtzygztzByFid(fid);
    }

    /**
     * 查询支援工资调整列表
     * 
     * @param wfzJtzygztz 支援工资调整
     * @return 支援工资调整
     */
    @Override
    public List<WfzJtzygztz> selectWfzJtzygztzList(WfzJtzygztz wfzJtzygztz)
    {
        return wfzJtzygztzMapper.selectWfzJtzygztzList(wfzJtzygztz);
    }

    /**
     * 新增支援工资调整
     * 
     * @param wfzJtzygztz 支援工资调整
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzJtzygztz(WfzJtzygztz wfzJtzygztz)
    {
        int rows = wfzJtzygztzMapper.insertWfzJtzygztz(wfzJtzygztz);
        insertWfzJtzygztzentry(wfzJtzygztz);
        return rows;
    }

    /**
     * 修改支援工资调整
     * 
     * @param wfzJtzygztz 支援工资调整
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzJtzygztz(WfzJtzygztz wfzJtzygztz)
    {
        wfzJtzygztzMapper.deleteWfzJtzygztzentryByFparentid(wfzJtzygztz.getFid());
        insertWfzJtzygztzentry(wfzJtzygztz);
        return wfzJtzygztzMapper.updateWfzJtzygztz(wfzJtzygztz);
    }

    /**
     * 批量删除支援工资调整
     * 
     * @param fids 需要删除的支援工资调整主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzJtzygztzByFids(Long[] fids)
    {
        wfzJtzygztzMapper.deleteWfzJtzygztzentryByFparentids(fids);
        return wfzJtzygztzMapper.deleteWfzJtzygztzByFids(fids);
    }

    /**
     * 删除支援工资调整信息
     * 
     * @param fid 支援工资调整主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzJtzygztzByFid(Long fid)
    {
        wfzJtzygztzMapper.deleteWfzJtzygztzentryByFparentid(fid);
        return wfzJtzygztzMapper.deleteWfzJtzygztzByFid(fid);
    }

    @Override
    public String importJtzygztz(WfzJtzygztz wfzJtzygztz) {
        JtzygztzInfo jtzygztzInfo = new JtzygztzInfo();
        String fnumber = wfzJtzygztz.getFnumber(); //单据编码
        String fcompany = wfzJtzygztz.getFcompany(); //公司
        String fperiod = wfzJtzygztz.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzJtzygztz.getFzrs(); //总人数
        BigDecimal fglf = wfzJtzygztz.getFglf();  //关联方人数
        BigDecimal fnscbzxrs = wfzJtzygztz.getFnscbzxrs();//合并纳税成本中心人数
        String fvourtype = wfzJtzygztz.getFvourtype(); //凭证字


        jtzygztzInfo.setNumber(fnumber);
        jtzygztzInfo.setCompany(fcompany);
        jtzygztzInfo.setPeriod(fperiod);
        jtzygztzInfo.setZrs(fzrs);
        jtzygztzInfo.setGlf(fglf);
        jtzygztzInfo.setNscbzxrs(fnscbzxrs);
        jtzygztzInfo.setVourType(fvourtype);
        jtzygztzInfo.setSourcebillid(String.valueOf(wfzJtzygztz.getFid()));

        List<WfzJtzygztzentry> wfzJtzygztzentryList = wfzJtzygztz.getWfzJtzygztzentryList();
        ArrayList<JtzygztzEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzJtzygztzentryList.size();j++){
            WfzJtzygztzentry wfzJtzygztzentry = wfzJtzygztzentryList.get(j);
            String fpersonnumber = wfzJtzygztzentry.getFpersonnumber();//员工编号
            String fcostnumber = wfzJtzygztzentry.getFcostnumber();//成本中心
            String fcostcompany = wfzJtzygztzentry.getFcostcompany();//成本中心所属财务组织
            String fzycompany = wfzJtzygztzentry.getFzycompany();//支援财务组织
            BigDecimal fjjje = wfzJtzygztzentry.getFjjje();//计件金额
            String fzybm = wfzJtzygztzentry.getFzybm();//支援部门
            BigDecimal fzybmje = wfzJtzygztzentry.getFzybmje();//支援部门金额
            BigDecimal fbkgryl = wfzJtzygztzentry.getFbkgryl();//补扣个人养老
            BigDecimal fbkgryy = wfzJtzygztzentry.getFbkgryy();//补扣个人医疗
            BigDecimal fbkgrsy = wfzJtzygztzentry.getFbkgrsy();//补扣个人失业
            BigDecimal fbkgrzf = wfzJtzygztzentry.getFbkgrzf();//补扣个人住房
            BigDecimal ffk = wfzJtzygztzentry.getFfk();//罚款
            BigDecimal fsfhj = wfzJtzygztzentry.getFsfhj();//实发合计
            String fyhzh = wfzJtzygztzentry.getFyhzh();//银行账号
            String fjsfs = wfzJtzygztzentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzJtzygztzentry.getFcbzxxz();//成本中心属性
            String fcostffjrjg = wfzJtzygztzentry.getFcostffjrjg();//成本中心发放工资金融机构
            String fvourtype1 = wfzJtzygztzentry.getFvourtype();//凭证字


            JtzygztzEntryInfo jtzygztzEntryInfo = new JtzygztzEntryInfo();
            jtzygztzEntryInfo.setPersonNumber(fpersonnumber);
            jtzygztzEntryInfo.setCostCenter(fcostnumber);
            jtzygztzEntryInfo.setCostcompany(fcostcompany);
            jtzygztzEntryInfo.setZycompany(fzycompany);
            jtzygztzEntryInfo.setJjje(fjjje);
            jtzygztzEntryInfo.setZybm(fzybm);
            jtzygztzEntryInfo.setZybmje(fzybmje);
            jtzygztzEntryInfo.setFbkgryl(fbkgryl);
            jtzygztzEntryInfo.setFbkgryy(fbkgryy);
            jtzygztzEntryInfo.setFbkgrsy(fbkgrsy);
            jtzygztzEntryInfo.setFbkgrzf(fbkgrzf);
            jtzygztzEntryInfo.setFfk(ffk);
            jtzygztzEntryInfo.setFsfhj(fsfhj);
            jtzygztzEntryInfo.setFyhzh(fyhzh);
            jtzygztzEntryInfo.setJsfs(fjsfs);
            jtzygztzEntryInfo.setCbzxxz(fcbzxxz);
            jtzygztzEntryInfo.setCostffjrjg(fcostffjrjg);
            jtzygztzEntryInfo.setVourType(fvourtype1);

            entry.add(jtzygztzEntryInfo);

        }

        jtzygztzInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(jtzygztzInfo);

        return json;
    }

    /**
     * 新增支援工资调整分录信息
     * 
     * @param wfzJtzygztz 支援工资调整对象
     */
    public void insertWfzJtzygztzentry(WfzJtzygztz wfzJtzygztz)
    {
        List<WfzJtzygztzentry> wfzJtzygztzentryList = wfzJtzygztz.getWfzJtzygztzentryList();
        Long fid = wfzJtzygztz.getFid();
        if (StringUtils.isNotNull(wfzJtzygztzentryList))
        {
            List<WfzJtzygztzentry> list = new ArrayList<WfzJtzygztzentry>();
            for (WfzJtzygztzentry wfzJtzygztzentry : wfzJtzygztzentryList)
            {
                wfzJtzygztzentry.setFparentid(fid);
                list.add(wfzJtzygztzentry);
            }
            if (list.size() > 0)
            {
                wfzJtzygztzMapper.batchWfzJtzygztzentry(list);
            }
        }
    }
}
